/* The code examples copyrighted by Nokia Corporation that are included to
 * this material are licensed to you under following MIT-style License:
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
#ifndef ACCOUNTMODEL_H
#define ACCOUNTMODEL_H

#include <Accounts/Account>

//Qt
#include <QAbstractTableModel>
#include <QMap>
#include <QVariant>

class AccountsListModel : public QAbstractListModel
{
    Q_OBJECT

public:
    enum Roles
    {
        AccountIdRole = Qt::UserRole,
        DisplayNameRole,
        ProviderNameRole,
        EnabledRole
    };

    AccountsListModel(Accounts::Manager *parent);
    ~AccountsListModel();

    int rowCount(const QModelIndex &index = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role) const;
    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;

    /*!
     *  Get the account for a certain modelIndex
     * \return Returns a pointer to an account if it was found or 0 if not.
     */
    Accounts::Account* account(const QModelIndex &index) const;
    Accounts::Manager* accountManager() const;
    void toggleEnabled(int accountindex);

private slots:
    void accountCreated(Accounts::AccountId id);
    void accountRemoved(Accounts::AccountId id);

private:
    Accounts::AccountIdList accounts;
};

#endif //ACCOUNTMODEL_H
